#include "BracketFunctionHandler.h"
#include "..\..\Common\StringHelper.h"

using namespace std;

namespace CExpression
{
	bool BracketFunctionHandler::ParseCore(ParseContext &context)
	{
		shared_ptr<ExpressionToken> token=context.Tokens()[context.CurrentTokenIndex()];
		if(token->Token[token->Token.size()-1]==TEXT('('))
		{
			if(context.CurrentTokenIndex()>0)
			{
				shared_ptr<ExpressionToken> &prevToken=context.Tokens()[context.CurrentTokenIndex()-1];
				ExpressionChar prevChar=prevToken->Token[prevToken->Token.size()-1];
				if(token->Token.size()==1&&!StringHelper::IsOperatorChar(prevChar)&&!StringHelper::IsSpecialChar(prevChar))
				{
					context.SetError();
					context.SetErrorMsg(TEXT("Missing operator before left bracket."));
					return true;
				}
			}
			context.OperatorStack().push(token);
			if(token->Token.size()>1)
			{
				context.FunctionParameterCount().push(0);
			}
			return true;
		}
		return false;
	}
}